package Part1;
/**
 * 
* @ClassName: Test
* @Description: TODO(https://blog.csdn.net/qq_38584967/article/details/78370043
* 
*  这道题虽然饶了很多弯，但是我们做完后发现整体过程其实并不是很复杂，
*  ①就是自类继承父类，调用方法时先是调用子类中的方法，如果没有就调用父类中的方法，
*  ②还有一点就是try{ }、catch{ }、finally{ }返回值的问题，
*           一旦try{ }中返回了某一个值，如果finally有返回值，finally中的返回值会覆盖try的返回值，
*           如果finally没有返回值，就是try中的返回值。掌握了这些，这道题就显得很简单了。
*  
* )
* @author hsj
* @email 2356899074@qq.com
* @date 2019年5月31日
*
 */
public class Extend_Trycatchfinally_V1 {
    public static void main(String [] args){
    	//=====最后输出什么？=====
    	/**
        	此时finally执行完毕，A的value值=22
			此时finally执行完毕，A的value值=34
			17
    	 */
        System.out.println(new B().getValue());  
    }
    static class A{
        protected int value;
        public A(int v) {
        	this.setValue(v);
        }
        public void setValue(int value){
            this.value = value;
        }
        public int getValue(){
            try{
                value++;
                return value;
            } catch(Exception e){
            	e.printStackTrace();
            } finally {
                this.setValue(value);
                System.out.println("此时finally执行完毕，A的value值="+value);  
            }
            return value;
        }
    }
    static class B extends A{
        public B() {
            super(5);//10-first
            this.setValue(this.getValue() - 3);
        }
        public void setValue(int value){
            super.setValue(2 * value);
        }
    }
}
